package com.ylr.nio.buffer;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Channel;
import java.nio.channels.FileChannel;

/**
 * @Classname BytebufferFile
 * @Description TODO
 * @Date 2021/9/18 23:27
 * @Created by ylr
 */

@Slf4j
public class BytebufferFile {

    public static void main(String[] args) {
        try (FileChannel channel = new FileInputStream("netty-learn/src/main/java/com/ylr/nio/buffer/stu.txt").getChannel()){
            ByteBuffer buffer = ByteBuffer.allocate(10);
            while (true) {
                // buffer为写模式
                int len = channel.read(buffer);
                log.info("读取字节长度{}", len);
                if (len == -1) break;

                buffer.flip();//切换到读模式
                while (buffer.hasRemaining()) {//如果还有剩余
                    byte b = buffer.get();//一次读取一个字节
                    log.info("读取到的字符: {}",(char) b);

                }

                //一次 循环后  切换为 写 模式 [ 复位了 position limit 指针 (动不了 实际数据) ]
                buffer.clear();
                // 从 上次未读完的地方 向前移动，并沿着 未读完数据的最后一位往后写
//                buffer.compact();

            }


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
